module Ejemplos
( fAstEjemplo1
, fAstEjemplo2
, gAstEspejarEntreAesEj1
, gAstEspejarEntreAesEj2
, gAstEspejarEntreAesEj3
, gAstEspejarEntreAesEjInf
, gAstAcumularAesEj1
, gAstCambiarGatoPorLiebreEj1
, gAstCambiarGatoPorLiebreEj2
, gAstIntercambiarConsecutivosEj1
, gAstIntercambiarConsecutivosEj2
, compEjemplo1
, compEjemplo2
, salidaAesEjemplo1
, espejarEntreAesEjemplo1
, espejarEntreAesEjemplo2
, espejarEntreAesEjemplo3
, salidaPosibleEjemplo1
, salidaPosibleEjemplo2
, salidaPosibleEjemplo3
, salidaPosibleEjemplo4
, salidaPosibleEjemplo5
, salidaPosibleEjemplo6
, salidaPosibleEjemplo7
, salidaPosibleEjemplo8
) where

import TP1

-- Este modulo provee ejemplos para las funciones que exporta el modulo PLP

-- fAst
fAstEjemplo1 :: Int
fAstEjemplo1 = (let (f,g,0) = acumularAes in (fAst f) 0 "cazaa33343aaaaaa3333z3")

fAstEjemplo2 :: Int
fAstEjemplo2 = (let (f,g,0) = acumularAes in (fAst f) 0 "cazaa33343aaaaaa3333z3aaa")

-- gAst
gAstEspejarEntreAesEj1 :: String
gAstEspejarEntreAesEj1 = aplicando espejarEntreAes "123a456aa789a"

gAstEspejarEntreAesEj2 :: String
gAstEspejarEntreAesEj2 = aplicando espejarEntreAes "aa542a3333aa4567aa"

gAstEspejarEntreAesEj3 :: String
gAstEspejarEntreAesEj3 = aplicando espejarEntreAes "aaaaaa"

-- uso: take 3 gAstEspejarEntreAesEjInf
gAstEspejarEntreAesEjInf :: String
gAstEspejarEntreAesEjInf = aplicando cambiarAE ("aa542a3333aa4567aa" ++ (repeat 'a'))

gAstAcumularAesEj1 :: String
gAstAcumularAesEj1 = aplicando acumularAes "cazaa33343aaaaaa3333z3aaa"

gAstCambiarGatoPorLiebreEj1 :: String
gAstCambiarGatoPorLiebreEj1 = aplicando cambiarGatoPorLiebre "Tengo 1 gato, 2 gatos, 3 gatos"

gAstCambiarGatoPorLiebreEj2 :: String
gAstCambiarGatoPorLiebreEj2 = aplicando cambiarGatoPorLiebre "gata y gato no son lo mismo"

gAstIntercambiarConsecutivosEj1 :: String
gAstIntercambiarConsecutivosEj1 = aplicando intercambiarConsecutivos "123456"

gAstIntercambiarConsecutivosEj2 :: String
gAstIntercambiarConsecutivosEj2 = aplicando intercambiarConsecutivos "Intercambiando Todo"

-- comp
compEjemplo1 :: String
compEjemplo1 = aplicando (comp espejarEntreAes espejarEntreAes) "12223a234234a"

compEjemplo2 :: String
compEjemplo2 = aplicando (comp acumularAes espejarEntreAes) "122223a23423aa7a"

-- salidaAes (uso: take 2 salidaAesEjemplo1)
salidaAesEjemplo1 :: String
salidaAesEjemplo1 = salidaAes cambiarAE

-- espejarEntreAes
espejarEntreAesEjemplo1 :: String
espejarEntreAesEjemplo1 = aplicando espejarEntreAes "1234a123444a3444a"

espejarEntreAesEjemplo2 :: String
espejarEntreAesEjemplo2 = aplicando espejarEntreAes "aa545a3333aa4567aa"

espejarEntreAesEjemplo3 :: String
espejarEntreAesEjemplo3 = aplicando espejarEntreAes "aaaaaa"

-- salidaPosible
salidaPosibleEjemplo1 :: Bool
salidaPosibleEjemplo1 = salidaPosible intercambiarConsecutivos "11"

salidaPosibleEjemplo2 :: Bool
salidaPosibleEjemplo2 = salidaPosible intercambiarConsecutivos "1134"

salidaPosibleEjemplo3 :: Bool
salidaPosibleEjemplo3 = salidaPosible intercambiarConsecutivos "113a"

salidaPosibleEjemplo4 :: Bool
salidaPosibleEjemplo4 = salidaPosible intercambiarConsecutivos "4437"

salidaPosibleEjemplo5 :: Bool
salidaPosibleEjemplo5 = salidaPosible mapearNumerosALetras "caja"

salidaPosibleEjemplo6 :: Bool
salidaPosibleEjemplo6 = salidaPosible mapearNumerosALetras "zorro"

salidaPosibleEjemplo7 :: Bool
salidaPosibleEjemplo7 = salidaPosible cambiarAE "aaa"
 
salidaPosibleEjemplo8 :: Bool
salidaPosibleEjemplo8 = salidaPosible cambiarAE "111"

